package networking;

import java.net.*;
import java.io.*;


/**
 * Diese Klasse umfasst die Funktion zum Initialisieren des Clients und des Starten des Lese/Empfangsthreads,
 * sowie die Funktion zum Senden von Daten an den Server aus dem Hauptprogramm heraus, zum Beispiel bei einer
 * Veränderung der Balkenposition.
 * 
 * @author Michael
 */
public class Client {

static int length = 256; // Länge eines Pakets


/**
 * Diese Methode sollte aufgerufen werden, um den Client zu initialisieren. Hierbei wird zur Anmeldung des Clients das Passwort versandt.
 * Außerdem ruft sie den gesonderten Thread auf, der für das Empfangen der Daten eingesetzt wird.
 * @param servername
 * @param passwort
 * @param port 
 */
public static void initClient(String servername, String passwort, int port) {
    //Ein neues Paket wird erstellt und eine neue Variable vom Type Byte, die das Passwort enthält, erstellt, welche dann übergeben werden kann.
    DatagramPacket paket;
    byte[] ba = passwort.getBytes();
    try {
        DatagramSocket socket = new DatagramSocket();
        InetAddress ia = InetAddress.getByName(servername);
        //Das Paket setzt sich aus dem Byte, dessen "Länge", der Zieladresse sowie dem Port zusammen
        paket = new DatagramPacket( ba, ba.length, ia, port);
        //Senden der Anmeldung
        socket.send( paket);
        //Starten des Empfangsthreads
        LeseThreadClient lesen = new LeseThreadClient(socket);
    }
    catch( IOException e ) {
        System.err.println("Ausnahmefehler: " + e );
    }
}

/**
 * Diese Methode sollte aufgerufen werden, wenn neue Daten versandt werden müssen.
 * @param daten
 * @param servername
 * @param port 
 */
public void sendData (String daten, String servername, int port) {
    try {
        DatagramPacket paket;
        DatagramSocket socket = new DatagramSocket();
        InetAddress ia = InetAddress.getByName(servername);
            byte[] ba = daten.getBytes();
            paket = new DatagramPacket( ba, ba.length, ia, port);
            socket.send( paket );
    }
    catch( IOException e ) {
        System.err.println("Ausnahmefehler: " + e );
    }
}

}
